package com.mirror.utils;

import java.util.HashMap;
import java.util.Map;

import android.annotation.SuppressLint;
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;

import com.mirror.llk.R;

/**
 * 短声效工具类
 * <p>
 * Copyright: Copyright (c) 2013-5-15 下午5:29:16
 * <p>
 * Company: 北京幻方朗睿技术有限公司
 * <p>
 * Author: 李晖
 * <p>
 * Version: 1.0
 * <p>
 */
public class ShortMusicUtils {

	/** 得到一个声音池引用 */
	private SoundPool sp;

	/** 得到一个map的引用 */
	private Map<Integer, Integer> spMap;

	/** 单例对象 */
	private static ShortMusicUtils instance;

	/** Context对象 */
	private Context context;

	/**
	 * 获取一个单例对象
	 * 
	 * @param context
	 * @return
	 */
	private static synchronized ShortMusicUtils getInstance(Context context) {
		if (instance == null) {
			instance = new ShortMusicUtils();
			instance.context = context;
			instance.initSoundPool();
		}
		return instance;
	}

	/**
	 * 播放声音,参数sound是播放音效的id，参数number是播放音效的次数
	 * 
	 * @param context
	 * @param sound
	 * @param number
	 */
	public static void playSound(Context context, int sound, int number) {
		ShortMusicUtils.getInstance(context).playSound(sound, number);
	}

	/**
	 * 暂停声效
	 * 
	 * @param context
	 * @param sound
	 */
	public static void pauseSound(Context context, int sound) {
		ShortMusicUtils.getInstance(context).pauseSound(sound);
	}

	/**
	 * 暂停声效
	 * 
	 * @param sound
	 */
	private void pauseSound(int sound) {
		sp.pause(spMap.get(sound));
	}

	/**
	 * 初始化声音池
	 */
	@SuppressLint("UseSparseArrays")
	private void initSoundPool() {
		// maxStreams参数，该参数为设置同时能够播放多少音效
		// streamType参数，该参数设置音频类型，在游戏中通常设置为：STREAM_MUSIC
		// srcQuality参数，该参数设置音频文件的质量，目前还没有效果，设置为0为默认值。
		sp = new SoundPool(5, AudioManager.STREAM_RING, 5);
		spMap = new HashMap<Integer, Integer>();
		spMap.put(1, sp.load(context, R.raw.ref_pull, 1));
		spMap.put(2, sp.load(context, R.raw.ref_pull_back, 1));
		spMap.put(3, sp.load(context, R.raw.ref_release, 1));
		spMap.put(4, sp.load(context, R.raw.ref_success, 1));
	}

	/**
	 * 播放声音,参数sound是播放音效的id，参数number是播放音效的次数
	 * 
	 * @param sound
	 * @param number
	 */
	private void playSound(int sound, int number) {
		// 实例化AudioManager对象
		AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
		// 返回当前AudioManager对象的最大音量值
		float audioMaxVolumn = am.getStreamMaxVolume(AudioManager.STREAM_RING);
		// 返回当前AudioManager对象的音量值
		float audioCurrentVolumn = am.getStreamVolume(AudioManager.STREAM_RING);
		float volumnRatio = audioCurrentVolumn / audioMaxVolumn;
		sp.play(spMap.get(sound), // 播放的音乐id
		        volumnRatio, // 左声道音量
		        volumnRatio, // 右声道音量
		        1, // 优先级，0为最低
		        number, // 循环次数，0无不循环，-1无永远循环
		        1 // 回放速度 ，该值在0.5-2.0之间，1为正常速度
		);
	}

}
